﻿using System;
using ProjetoSolo.QueroGas.Aplicacao.ServicosExternos;
using ProjetoSolo.QueroGas.Dominio.Entidades;
using ProjetoSolo.QueroGas.Dominio.Repositorios;
using ProjetoSolo.QueroGas.Infraestrutura.PersistenciaAdo;
using ProjetoSolo.QueroGas.Infraestrutura.PersistenciaAdo.Repositorios;
using ProjetoSolo.QueroGas.Infraestrutura.ServicosWeb;
using ProjetoSolo.QueroGas.Infraestrutura.Validacao;

namespace ProjetoSolo.QueroGas.Aplicacao.Servicos
{
    public static class ServicoLogin
    {
        public static Usuario Logar(string loginUsuario, string senha)
        {
            RegraValidacao.VerificarStringVazia(loginUsuario, "O login do usuário deve ser informado.");
            RegraValidacao.VerificarStringVazia(senha, "A senha do usuário deve ser informada.");

            Usuario usuarioLogado;

            using (IContextoRepositorio contexto = new ContextoAdo("QueroGas"))
            {
                try
                {
                    IRepositorioUsuario repositorio = new RepositorioUsuario(contexto);

                    IServicoCriptografia servicoCriptografia = new ServicoCriptografiaMD5();
                    senha = servicoCriptografia.Criptografar(senha);

                    usuarioLogado = repositorio.BuscarUsuarioPorLogin(loginUsuario, senha);

                    if (usuarioLogado == null)
                        throw new Exception("Usuario ou senha informado não existe. Tente novamente.");

                    if(!usuarioLogado.Ativo)
                        throw new Exception("Seu usuário está inativo.");

                    repositorio.RegistrarUltimoLoginUsuario(usuarioLogado.IdUsuario);

                    contexto.PersistirAlteracoes();
                }
                catch (Exception)
                {
                    contexto.DescartarAlteracoes();
                    throw;
                }
            }

            return usuarioLogado;
        }
    }
}
